#ifndef BRANCHOBJ_H
#define BRANCHOBJ_H

#include "taskobj.h"

namespace xvs {

enum GroupInstType
{
    GroupInst_Bool,
    GroupInst_Int,
    GroupInst_String
};

/**
 * @brief The GroupInst class 组合指令    (if,switch,etc)
 */
class OBJLIB_EXPORT GroupInst : public InstObj
{
    Q_OBJECT
public:
    GroupInst();

    TaskObj* TaskAt(QVariant key);//根据序号获取任务对象
    QList<QVariant> Keys() const;
    int TaskCount() const;//组中任务数

protected:
    /**
     * @brief   SetGroupType    设置任务组类型
     * @param   type    bool/int/QString
     * @note    不同于原类型时，会自动清空组中所有任务(慎重)
     */
    void SetGroupType(const GroupInstType type);//设置前会自动清空原来的

    /**
     * @brief AddContain    添加一个任务(任务会根据名称自动排序)
     * @param value         bool int QString
     * @return              成功添加返回0，已经存在返回-1
     */
    int AddTask(QVariant key, const QString& taskdesc = "");

    void Clear();//清空所有任务组对象
    void RemoveTask(QVariant key);//移除组中任务

private:
    QString mType;
    QMap<QVariant,TaskObj*> mTaskObjs;
};



}

#endif // BRANCHOBJ_H
